# @Version        : 1.0
# @Update Time    : 2024/11/24 22:42
# @File           : task_utils.py
# @IDE            : PyCharm
# @Desc           : 定时任务工具类


class TaskUtils:
    @staticmethod
    def parse_cron_expression(expression: str) -> tuple:
        """
        解析 cron 表达式

        :param expression: cron 表达式，支持六位或七位，分别表示秒、分钟、小时、天、月、星期几、年
        :return: 解析后的秒、分钟、小时、天、月、星期几、年字段的元组
        """
        fields = expression.strip().split()

        if len(fields) not in (6, 7):
            raise ValueError("无效的 Cron 表达式")

        parsed_fields = [None if field in ("*", "?") else field for field in fields]
        if len(fields) == 6:
            parsed_fields.append(None)

        return tuple(parsed_fields)

    @staticmethod
    def parse_interval_expression(expression: str) -> tuple:
        """
        解析 interval 表达式

        :param expression: interval 表达式，分别为：秒、分、时、天、周，例如，设置 10 * * * * 表示每隔 10 秒执行一次任务。
        :return:
        """  # noqa E501
        # 将传入的 interval 表达式拆分为不同的字段
        fields = expression.strip().split()

        if len(fields) != 5:
            raise ValueError("无效的 interval 表达式")

        parsed_fields = [int(field) if field != "*" else 0 for field in fields]
        return tuple(parsed_fields)
